<?php

/**
 * usuario actions.
 *
 * @package    fisio-ud
 * @subpackage usuario
 * @author     Johan AR <j3valentin@gmail.com>
 */
class usuarioActions extends sfActions {

  public function executeIndex(sfWebRequest $request) {
//    $this->Usuarios = UsuarioPeer::doSelect(new Criteria());
    $this->Usuarios = UsuarioPeer::doSelectJoinAll(new Criteria());
  }

  public function executeShow(sfWebRequest $request) {
    $this->Usuario = UsuarioPeer::retrieveByPk($request->getParameter('id'));
    $this->forward404Unless($this->Usuario);
  }

  public function executeNew(sfWebRequest $request) {
    $this->form = new UsuarioForm();
    if ($request->hasParameter('rol')) {
      $User = new sfGuardUser();
      if ($request->hasParameter('codigo'))
        $User->setUsername ($request->getParameter('codigo'));
      $Group = sfGuardGroupQuery::create()->findOneByName($request->getParameter('rol'));
      $UserGroup = new sfGuardUserGroup();
      $UserGroup->setsfGuardUser($User);
      $UserGroup->setsfGuardGroup($Group);
      $this->form1 = new MyUserForm($User);
    } else {
      $this->form1 = new sfGuardUserForm();
    }
    $this->form2 = new PersonaForm();
//    $this->form3 = new PersonaDetalleForm();
  }

  public function executeCreate(sfWebRequest $request) {
    $this->forward404Unless($request->isMethod(sfRequest::POST));

    $this->form = new UsuarioForm();
    //$this->form1 = new sfGuardUserForm();
    $this->form1 = new MyUserForm();
    $this->form2 = new PersonaForm();
//    $this->form3 = new PersonaDetalleForm();

    $this->processForm($request, $this->form1, $this->form2/*, $this->form3*/);

    $this->setTemplate('new');
  }

  public function executeEdit(sfWebRequest $request) {
    $this->forward404Unless($Usuario = UsuarioPeer::retrieveByPk($request->getParameter('id')), sprintf('Object Usuario does not exist (%s).', $request->getParameter('id')));
    $this->form = new UsuarioForm($Usuario);
    $this->form1 = new sfGuardUserForm($Usuario->getsfGuardUser());
    $this->form2 = new PersonaForm($Usuario->getPersona());
//    $pd = $Usuario->getPersona()->getPersonaDetalles();
//    if (count($pd))
//      $this->form3 = new PersonaDetalleForm($pd[0]);
//    else
//      $this->form3 = new PersonaDetalleForm();
  }

  public function executeUpdate(sfWebRequest $request) {
    $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT));
    $this->forward404Unless($Usuario = UsuarioPeer::retrieveByPk($request->getParameter('id')), sprintf('Object Usuario does not exist (%s).', $request->getParameter('id')));
    $this->form = new UsuarioForm($Usuario);
    $this->form1 = new sfGuardUserForm($Usuario->getsfGuardUser());
    $this->form2 = new PersonaForm($Usuario->getPersona());
//    $pd = $Usuario->getPersona()->getPersonaDetalles();
//    if (count($pd))
//      $this->form3 = new PersonaDetalleForm($pd[0]);
//    else
//      $this->form3 = new PersonaDetalleForm();

    $this->processForm($request, $this->form1, $this->form2/*, $this->form3*/);

    $this->setTemplate('edit');
  }

  public function executeDelete(sfWebRequest $request) {
    $request->checkCSRFProtection();

    $this->forward404Unless($Usuario = UsuarioPeer::retrieveByPk($request->getParameter('id')), sprintf('Object Usuario does not exist (%s).', $request->getParameter('id')));
    $Usuario->delete();

    $this->redirect('usuario/index');
  }

  protected function processForm(sfWebRequest $request, sfForm $form1, sfForm $form2/*, sfForm $form3*/) {

    $this->setTemplate('new');

    $form1->bind($request->getParameter($form1->getName()));
    $form2->bind($request->getParameter($form2->getName()), $request->getFiles($form2->getName()));
//    $form3->bind($request->getParameter($form3->getName()));
//    die (print_r($request->getParameter($form3->getName())));

    if ($form1->isValid()) {
      if ($form2->isValid()) {
        $sfGuardUser = new sfGuardUser();
        $sfGuardUser->getGroupNames();

        $Persona = new Persona();
        $Persona = $form2->save();
        
        $sfGuardUser = $form1->save();

        $Usuarios = $sfGuardUser->getUsuarios();
        $Usuario = $Usuarios[0];
        $Usuario->setPersona($Persona);
        $Usuario->save();

//        if ($form3->isValid()) {
//          $PersonaDetalle = $form3->save();
//          $PersonaDetalle->setPersona($Persona);
//          $PersonaDetalle->save();
//
//          $this->getUser()->setFlash('notice', 'Usuario completado!.');
//          $this->setTemplate('index');
//        }
        
        $this->getUser()->setFlash('notice', 'Usuario creado exitosamente!.');
        
        if ($this->request->hasParameter('cita'))
          $this->redirect('cita/new?codigo='.$sfGuardUser->getUserName().'&fecha='.$request->getParameter('cita'));
//          $this->forward ('cita', 'new');
        
        $this->redirect('usuario/index');
//        $this->redirect('usuario/edit?id=' . $Usuario->getId());
      } else {
        $this->getUser()->setFlash('error', 'Persona no valida.');
      }
    }

//    $this->setTemplate('new');
//    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
//    if ($form->isValid())
//    {
//      $Usuario = $form->save();
//
//      $this->redirect('usuario/edit?id='.$Usuario->getId());
//    }
  }

  public function executeSubirArchivos($peticion) {
    if ($peticion->hasFiles()) {
      foreach ($peticion->getFileNames() as $archivoSubido) {
        $nombreArchivo = $peticion->getFileName($archivoSubido);
        $tamanoArchivo = $peticion->getFileSize($archivoSubido);
        $tipoArchivo = $peticion->getFileType($archivoSubido);
        $archivoErroneo = $peticion->hasFileError($archivoSubido);
        $directorioSubidas = sfConfig::get('sf_upload_dir');
        $peticion->moveFile($archivoSubido, $directorioSubidas . '/' . $nombreArchivo);
      }
    }
  }

}